package com.team.employment.model.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
public class BaseEntity implements Serializable { //所有的实体类均实现了`Serializable`接口，方便对实体对象进行缓存。

    @Schema(description = "主键")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /*
        `create_time`和`update_time`：
        可使用mybatis-plus的自动填充功能，所谓自动填充，就是通过统一配置，在插入或更新数据时，自动为某些字段赋值，
     */

    @Schema(description = "创建时间")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    @JsonIgnore //有此注解，查询结果不会有此字段
    private Date createTime;

    @Schema(description = "更新时间")
    @TableField(value = "update_time",fill = FieldFill.UPDATE)
    @JsonIgnore
    private Date updateTime;

    /*
            通常情况下接口响应的Json对象中并不需要`create_time`、`update_time`、`is_deleted`等字段，
            这时只需在实体类中的相应字段添加`@JsonIgnore`注解，该字段就会在序列化时被忽略。
     */
    //isDeleted == 1的话，不应该出现在前端页面上。
    //在实体类中的逻辑删除标识字段上增加`@TableLogic`注解，查询时则可以增加过滤条件`is_deleted=0`；
    @Schema(description = "逻辑删除")
    @TableField("is_deleted")
    @TableLogic
    @JsonIgnore
    private Byte isDeleted;

}